
package carmadness.model.helpers;

/**
 * Véletlenszámgenerátor osztály, amely rendelkezik interaktív móddal is
 * 
 * @author sztomi
 * @version 1.0
 * @created 10-Apr-2010 2:32:42 PM
 */
public class Random
{
	/**
	 * Interaktív módban felhasználói bemenet lesz a visszaadott érték.
	 */
	private static boolean interactive = false;

	private Random()
	{
	}

	/**
	 * 
	 * @param probability
	 *            Mekkora az igazzal való visszatérés valószínusége?
	 */
	public static boolean getRandomBool( float probability )
	{
		if ( interactive )
		{
			return UserInput.yesNo( String.format( "Random::getRandomBool(%g)", probability ) );
		}
		else
		{
			float rand = (float)Math.random();
			return ( probability <= rand );
		}
	}

	/**
	 * 
	 * @param high
	 *            A választandó zárt intervallum felso korlátja.
	 * @param low
	 *            A választandó zárt intervallum alsó korlátja.
	 */
	public static float getRandomFloat( float high, float low )
	{
		if ( interactive )
		{
			return UserInput.getFloat( String.format( "Random::getRandomFloat(high = %g, low = %g)", high, low ) );
		}
		else
		{
			float rand = (float)Math.random();
			return ( ( high - low ) * rand ) + low;
		}
	}

	/**
	 * 
	 * @param high
	 *            A választandó zárt intervallum felso korlátja.
	 * @param low
	 *            A választandó zárt intervallum alsó korlátja.
	 */
	public static int getRandomInt( int high, int low )
	{
		if ( interactive )
		{
			return UserInput.getInt( String.format( "Random::getRandomInt(high = %g, low = %g)", high, low ) );
		}
		else
		{
			float rand = (float)Math.random();
			return (int)( ( ( high - low ) * rand ) + low );
		}
	}

	/**
	 * Get interactive.
	 * 
	 * @return interactive as boolean.
	 */
	public static boolean getInteractive()
	{
		return interactive;
	}

	/**
	 * Set interactive.
	 * 
	 * @param interactive
	 *            the value to set.
	 */
	public static void setInteractive( boolean interact )
	{
		interactive = interact;
	}
}
